/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mowa.biblioteca.controller;

import com.mowa.biblioteca.model.Categoria;
import com.mowa.biblioteca.model.EstadoUsuarioLibro;
import com.mowa.biblioteca.model.Libro;
import com.mowa.biblioteca.service.LibroService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Osamu
 */
@Controller
public class LibroController {

    private LibroService libroService;

    @Autowired
    public  LibroController(LibroService libroService){
        this.libroService = libroService;
    }


    @RequestMapping(method=RequestMethod.GET)
    public String getCreateForm(Model model) {
            model.addAttribute(new Libro());
            return "mantLibro";
    }

    @RequestMapping(value="/libros.htm", method=RequestMethod.GET)
    public void listarLibros(Model model, @ModelAttribute("libro") Libro libro) {

             List<Libro> libros = libroService.obtenerLibros(libro);
		model.addAttribute("listaLibros", libros);
		model.addAttribute("libro", new Libro());
                //return "libros";
    }

    @RequestMapping(value="/libros.htm", method=RequestMethod.POST) //
    public String filtrarLibros(Model model, @ModelAttribute("libro") Libro libro) {

            List<Libro> libros = libroService.obtenerLibros(libro);
            model.addAttribute("listaLibros", libros);
            model.addAttribute("libro", libro);
           return "libros";
    }

    @ModelAttribute("listaCategorias")
    public   List<Categoria> listarCategoria() {
        List<Categoria> listaCategorias = libroService.obtenerListaCategoria();
        return listaCategorias;
    }

    @ModelAttribute("listaEstados")
    public   List<EstadoUsuarioLibro> listaEstados() {
        List<EstadoUsuarioLibro> lista = libroService.obtenerListaEstadoUsuarioLibro();
        return lista;
    }


    @RequestMapping(value="/catalogo.htm", method=RequestMethod.GET)
    public void listaCatalogo(Model model, @ModelAttribute("libro") Libro libro) {

             List<Libro> libros = libroService.obtenerLibros(libro);
		model.addAttribute("listaLibros", libros);
		model.addAttribute("libro", new Libro());
                //return "libros";
    }

    @RequestMapping(value="/catalogo.htm", method=RequestMethod.POST)
    public void listaCatalogoF(Model model, @ModelAttribute("libro") Libro libro) {

             List<Libro> libros = libroService.obtenerLibros(libro);
		model.addAttribute("listaLibros", libros);
		model.addAttribute("libro", libro);
                //return "libros";
    }


    @RequestMapping(value="/mantLibro.htm", method=RequestMethod.POST)
    public String grabarLibro(@ModelAttribute("libro") Libro libro, SessionStatus status) {

        try {
                libroService.grabarLibro(libro);
                return "redirect:libros.htm";
        } catch (Exception e) {
                return  e.getMessage(); //"mantLibro";
        }
    }

    @RequestMapping(value = "mantLibro.htm", method = RequestMethod.GET)
    //@RequestMapping(value = "/testjsp.htm", method = RequestMethod.GET)
    public @ModelAttribute("libro")
    Libro verLibros(@RequestParam(value = "idlibro", required = false) Integer idlibro) {
        try {
                if (idlibro != null) {
                        Libro libro = libroService.obtenerLibro(idlibro);
                        return libro;
                }

            } catch (Exception e) {
                //throw e.getMessage(); //"mantLibro";
            }
        return new Libro();
    }


}
